//
//  main.c
//  左移右移
//
//  Created by szcq on 2021/4/16.
//

#include <stdio.h>

int main(int argc, const char * argv[]) {
    // insert code here...
//    printf("Hello, World!\n");
    printf("result =  %d\n", 9 << 1);//18
//    printf("result =  %d\n", 9 << 2);//36
//    printf("result =  %d\n", 9 << 3);//72
    
      //***  输入一个数  ，输出  其 二进制的值
    /*
     13
     0000 0000 0000 0000 0000 0000 0000 0000
     0000 0000 0000 0000 0000 0000 0000 1101
                                           0000 0000 0000 0000 0000 0000 0000 1101
     1、将  13 的二进制数据向右  移动 31位，得到  13  的二进制数据的 最高位
     2、将上一步得到的值   &1  得到  最高位的  值
     
     将 13  右移 30 位 得到 第二位 二进制的数
     一次类推
     
     */
    
    void printBinary(int num);
    printBinary(13);
    
    return 0;
}

void printBinary(int num) {
    int offset = 31;
    while (offset >= 0) {
        int result  = (num >> offset) & 1;//0000 0000 0000 0000 0000 0000 0000 1101
//        int result  = (num >> offset) ;//0000 0000 0000 0000 0000 0000 0000 13613
        printf("%d",result);
        offset -- ;
        if ((offset+1) % 4 == 0) {
            printf(" ");
        }
    }
    printf("\n");
}
